//
//  ReusabelViewsInitProtocol.swift
//  CodingTest
//
//  Created by LYPC on 2021/11/18.
//

import UIKit

///  UITableViewCell 快速初始化协议
public protocol CTTableViewCellInitProtocol where Self: UITableViewCell {
    static var reuseID: String { get }
    static func cell(withTableView tableView: UITableView, indexPath: IndexPath) -> Self
}

extension CTTableViewCellInitProtocol {
    public static var reuseID: String {
        return NSStringFromClass(Self.self).components(separatedBy: ".").last!
    }
    
    public static func cell(withTableView tableView: UITableView, indexPath: IndexPath) -> Self {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: reuseID, for: indexPath) as? Self else {
            return Self(style: .default, reuseIdentifier: reuseID)
        };  return cell
    }
}

///  UITableViewHeaderFooterView 快速初始化协议
public protocol CTTableHeaderFooterInitProtocol where Self: UITableViewHeaderFooterView {
    static var reuseID: String { get }
    static func header(withTableView tableView: UITableView) -> Self
    static func footer(withTableView tableView: UITableView) -> Self
}

extension CTTableHeaderFooterInitProtocol {
    public static var reuseID: String {
        return NSStringFromClass(Self.self).components(separatedBy: ".").last!
    }
    
    public static func header(withTableView tableView: UITableView) -> Self {
        guard let v = tableView.dequeueReusableHeaderFooterView(withIdentifier: reuseID) as? Self else {
            return Self(reuseIdentifier: reuseID)
        };  return v
    }
    
    public static func footer(withTableView tableView: UITableView) -> Self {
        guard let v = tableView.dequeueReusableHeaderFooterView(withIdentifier: reuseID) as? Self else {
            return Self(reuseIdentifier: reuseID)
        };  return v
    }
}
